/**************************************************************************************
*
*	Copyright (C) 2009 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	RenderEntryDispatchCompute.h
*
*	Description -	
*
*	Comments	-	
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	08/01/2013	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_RENDER_ENTRY_DISPATCH_COMPUTE_H_
#define _PSX_RENDER_ENTRY_DISPATCH_COMPUTE_H_

#include "PulseSTD.h"
#include "GraphicsTypes.h"
#include "RenderEntry.h"
#include "RenderPass.h"
#include "ParameterContainer.h"
#include "Array.h"

namespace Pulse
{
	class RenderEntryDispatchCompute : public RenderEntry
	{
	public:

		RenderEntryDispatchCompute( void );

		virtual ~RenderEntryDispatchCompute( void );

		void SetThreadCounts( UINT threadCountX, UINT threadCountY, UINT threadCountZ );

		const UINT GetThreadCountX( void ) const { return m_threadCountX; }
		
		const UINT GetThreadCountY( void ) const { return m_threadCountY; }

		const UINT GetThreadCountZ( void ) const { return m_threadCountZ; }

		virtual void PreExecute( GraphicsPipeline *pPipeline );

		virtual void Execute( GraphicsPipeline *pPipeline );

		virtual void PostExecute( GraphicsPipeline *pPipeline );

	public:

		typedef Array<ParameterContainer*> ParameterContainerList;

		ParameterContainerList	m_paramContainerList;
		ParameterContainer		m_parameters;
		UINT					m_threadCountX;
		UINT					m_threadCountY;
		UINT					m_threadCountZ;
		RenderPass				*m_pRenderPass;
		
	};
}

#endif /* _PSX_RENDER_ENTRY_DISPATCH_COMPUTE_H_ */